from datetime import datetime
from bson.objectid import ObjectId
from flask import Flask,render_template,url_for,redirect,request
import pymongo
app = Flask(__name__)

# 数据库实例
connect = pymongo.MongoClient('127.0.0.1',27017)
db = connect.todo

# mongo TODO文档结构
class Todo(object):
    """
    一行待办事项书结构.添加
    字段: 事项内容,添加创建时间,状态(未完成和已完成),完成时间
    """
    @staticmethod
    def create_doc(self,content):
        return{
            'content':content,
            'create_time':datetime.now(),
            'status':  0,            #0未完成1已完成
            'finish_time':None
        }



@app.route('/')
def index():
    return redirect(url_for('get'))

@app.route('/add',methods=['POST'])
def add():
    """更新一条todo"""
    form = request.form
    content = form['content']
    print(content)
    if content:
        a = db.todo.insert({
            'content': content,
            'create_time': datetime.now(),
            'status': 0,  # 0未完成1已完成
            'finish_time': None
        })
    print(a)
    if a:
        return redirect(url_for('index'))

@app.route('/get')
def get():
    """展示todo列表"""
    todos = db.todo.find({}).sort([('finish_time',1), ('status',1),])#返回迭代器,只能遍历一次,时间格式化最好在数据库查询语句中处理.(可在前端处理,在添加处理)
    todo_list = []
    for todo in todos:
        todo_line = {}
        todo_line['_id'] = todo['_id']
        todo_line['status'] = todo['status']
        todo_line['content'] = todo['content']
        todo_line['create_time'] = todo['create_time'].strftime('%Y-%m-%d %H:%M:%S')
        todo_list.append(todo_line)
    return render_template('index.html',todo_list=todo_list)

@app.route('/finish')
def finish():
    """更新状态已完成"""
    args = request.args
    _id = args['_id']
    a = db.todo.update(
        {"_id":ObjectId(_id)},
        {
         "$set": {
         "status":1,
         'finish_time':datetime.now()
            }
        }
    )
    print(a)
    return redirect(url_for('index'))

@app.route('/delete')
def delete():
    """删除无用的todo"""
    args = request.args
    _id = args['_id']
    print(_id)
    a = db.todo.remove({
        "_id":ObjectId(_id)
    })
    print(a)
    return redirect(url_for('index'))


if __name__ == '__main__':
    app.run()
